home *** CD-ROM | disk | FTP | other *** search
/ Aminet 15 / Aminet 15 - Nov 1996.iso / Aminet / dev / misc / FixMFMDevice.lha / Source / DecrunchFile.s next >
Encoding:
Text File  |  1996-09-21  |  1.3 KB  |  60 lines

  1.  
  2. DecrunchFile    Move.l    _XfdBase(a5),a6
  3.         Call    XFDAllocBufferInfo
  4.         Move.l    d0,MyXFDBufferInfo(a5)
  5.         Beq.b    .NoBufferInfo
  6.  
  7.         Move.l    d0,a0
  8.  
  9.         Moveq    #1<<XFDFB_RECOGEXTERN,d0
  10.         Move.w    d0,xfdbi_Flags(a0)
  11.  
  12.         Move.l    LoadAddr(a5),Xfdbi_SourceBuffer(a0)
  13.         Move.l    LoadFileSize(a5),Xfdbi_SourceBufLen(a0)
  14.         Call    XFDRecogBuffer
  15.         Tst.l    d0
  16.         Beq.b    .NotRecognised
  17.  
  18. .MultiPacked
  19.         Move.l    MyXFDBufferInfo(a5),a2
  20.         Move.w    xfdbi_PackerFlags(a2),d7
  21.  
  22. ;.FileIsData
  23.         Clr.l    Xfdbi_TargetBufMemType(a2)
  24.         Move.l    _XfdBase(a5),a6
  25.         Move.l    a2,a0
  26.         Call    XFDDecrunchBuffer
  27.         Tst.l    d0
  28.         Beq.b    .DecrunchError
  29.  
  30.         Bsr    FreeFileMemory
  31.         Move.l    Xfdbi_TargetBuffer(a2),LoadAddr(a5)
  32.         Move.l    Xfdbi_TargetBufLen(a2),LoadBufferSize(a5)
  33.         Move.l    Xfdbi_TargetBufSaveLen(a2),LoadFileSize(a5)
  34.  
  35. ;--- Test if a crunched file has been crunched again.
  36. ;--- I.e., a Powerpacked file packed with TitanCrunch
  37.  
  38.         Move.l    LoadAddr(a5),Xfdbi_SourceBuffer(a2)
  39.         Move.l    LoadFileSize(a5),Xfdbi_SourceBufLen(a2)
  40.         Move.l    a2,a0
  41.         Move.l    _XfdBase(a5),a6
  42.         Call    XFDRecogBuffer
  43.         Tst.l    d0
  44.         Bne.b    .MultiPacked
  45.  
  46. .CantDecrypt
  47. .DontDepack    Move.l    _XfdBase(a5),a6
  48.  
  49. .NotRecognised    Move.l    MyXFDBufferInfo(a5),a1
  50.         Jump    XFDFreeBufferInfo
  51.  
  52. .NoBufferInfo    Rts
  53.  
  54.  
  55. .DecrunchError    Ext.l    d0
  56.         Call    XfdGetErrorText
  57.         Move.l    d0,PrintFVarStack(a5)
  58.         ;Printf    DecrunchErrorTxt
  59.         Bra.b    .DontDepack
  60.